<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Physics engine</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Physics_engine"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.tmh.player.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Physics_engine rootpage-Physics_engine skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Physics engine</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1305433154">
/* start https://en.wikipedia.org/ */
.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style>
<style data-mw-deduplicate="TemplateStyles:r1295905060">
/* start https://en.wikipedia.org/ */
.mw-parser-output .infobox-subbox{padding:0;border:none;margin:-3px;width:auto;min-width:100%;font-size:100%;clear:none;float:none;background-color:transparent}.mw-parser-output .infobox-3cols-child{margin:auto}.mw-parser-output .infobox .navbar{font-size:100%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media(min-width:640px){body.skin--responsive .mw-parser-output .infobox-table{display:table!important}body.skin--responsive .mw-parser-output .infobox-table>caption{display:table-caption!important}body.skin--responsive .mw-parser-output .infobox-table>tbody{display:table-row-group}body.skin--responsive .mw-parser-output .infobox-table th,body.skin--responsive .mw-parser-output .infobox-table td{padding-left:inherit;padding-right:inherit}}
/* end https://en.wikipedia.org/ */
</style><table class="infobox vevent"><tbody><tr><th colspan="2" class="infobox-above summary">Physics engine</th></tr><tr><td colspan="2" class="infobox-image logo"><div class="infobox-caption"><div style="text-align: left;">These are four examples of a physics engine simulating an object falling onto a slope. The examples differ in accuracy of the simulation:
<ol><li>No physics</li>
<li><a href="Gravity" title="Gravity">Gravity</a>, no collision detection</li>
<li>Gravity and <a href="Collision_detection" title="Collision detection">collision detection</a>, no rigid body dynamics</li>
<li>Gravity, collision detection and rotation calculations</li></ol></div></div>
</td></tr></tbody></table>
<p>A <b>physics engine</b> is <a href="Computer_software" class="mw-redirect" title="Computer software">computer software</a> that provides an approximate <a href="Computer_simulation" title="Computer simulation">simulation</a> of certain <a href="Physical_system" title="Physical system">physical systems</a>, typically <a href="Classical_dynamics" class="mw-redirect" title="Classical dynamics">classical dynamics</a>, including <a href="Rigid_body_dynamics" title="Rigid body dynamics">rigid body dynamics</a> (including <a href="Collision_detection" title="Collision detection">collision detection</a>), <a href="Soft_body_dynamics" class="mw-redirect" title="Soft body dynamics">soft body dynamics</a>, and <a href="Fluid_simulation" class="mw-redirect" title="Fluid simulation">fluid dynamics</a>. It is of use in the domains of <a href="Computer_graphics" title="Computer graphics">computer graphics</a>, <a href="Video_game" title="Video game">video games</a> and film (<a href="Computer-generated_imagery" title="Computer-generated imagery">CGI</a>). Their main uses are in video games (typically as <a href="Game_middleware" class="mw-redirect" title="Game middleware">middleware</a>), in which case the simulations are in <a href="Real-time_simulation" title="Real-time simulation">real-time</a>. The term is sometimes used more generally to describe any <a href="Software_system" title="Software system">software system</a> for simulating physical phenomena, such as <a href="High-performance_computing" title="High-performance computing">high-performance scientific simulation</a>.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Description">Description</h2></div>
<p>There are generally two classes of physics <a href="Software_engine" title="Software engine">engines</a>: <a href="Real-time_computer_graphics" title="Real-time computer graphics">real-time</a> and high-precision. High-precision physics engines require more processing power to calculate very <a href="Accuracy_and_precision" title="Accuracy and precision">precise</a> physics and are usually used by scientists and computer-animated movies. Real-time physics engines—as used in video games and other forms of interactive computing—use simplified calculations and decreased accuracy to compute in time for the game to respond at an appropriate rate for game play. A physics engine is essentially a big calculator that does mathematics needed to simulate physics.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Scientific_engines">Scientific engines</h3></div>
<p>One of the first general purpose computers, <a href="ENIAC" title="ENIAC">ENIAC</a>, was used as a very simple type of physics engine. It was used to design ballistics tables to help the United States military estimate where <a href="Artillery" title="Artillery">artillery</a> shells of various mass would land when fired at varying angles and gunpowder charges, also accounting for drift caused by wind. The results were calculated a single time only, and were tabulated into printed tables handed out to the artillery commanders.
</p><p>Physics engines have been commonly used on supercomputers since the 1980s to perform <a href="Computational_fluid_dynamics" title="Computational fluid dynamics">computational fluid dynamics</a> modeling, where particles are assigned <a href="Force_vector" class="mw-redirect" title="Force vector">force vectors</a> that are combined to show circulation. Due to the requirements of speed and high precision, special computer processors known as <a href="Vector_processor" title="Vector processor">vector processors</a> were developed to accelerate the calculations. The techniques can be used to model weather patterns in <a href="Weather_forecasting" title="Weather forecasting">weather forecasting</a>, wind tunnel data for designing air- and watercraft or motor vehicles including racecars, and thermal cooling of computer processors for improving <a href="Heat_sink" title="Heat sink">heat sinks</a>. As with many calculation-laden processes in computing, the accuracy of the simulation is related to the resolution of the simulation and the precision of the calculations; <a href="Butterfly_effect" title="Butterfly effect">small fluctuations</a> not modeled in the simulation can drastically change the predicted results.
</p><p>Tire manufacturers use physics simulations to examine how new <a href="Tire_tread" title="Tire tread">tire tread</a> types will perform under wet and dry conditions, using new tire materials of varying flexibility and under different levels of weight loading. The simulations optimize tire operations, material selection, costs, and enhance time efficiency.
</p>
<div class="mw-heading mw-heading3"><h3 id="Game_engines">Game engines</h3></div>
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">Main articles: <a href="Game_engine" title="Game engine">Game engine</a> and <a href="Game_physics" title="Game physics">Game physics</a></div>
<p>In most computer games, speed of the processors and <a href="Gameplay" title="Gameplay">gameplay</a> are more important than accuracy of simulation. This leads to designs for physics engines that produce results in real-time but that replicate real world physics only for simple cases and typically with some approximation. More often than not, the simulation is geared towards providing a "perceptually correct" approximation rather than a real simulation. However some game engines, such as <a href="Source_(game_engine)" title="Source (game engine)">Source</a>, use physics in puzzles or in combat situations. This requires more accurate physics so that, for example, the momentum of an object can knock over an obstacle or lift a sinking object.
</p><p><a href="Physically_based_animation" title="Physically based animation">Physically-based</a> character animation in the past only used <a href="Rigid_body_dynamics" title="Rigid body dynamics">rigid body dynamics</a> because they are faster and easier to calculate, but modern games and movies are starting to use <a href="Soft_body_dynamics" class="mw-redirect" title="Soft body dynamics">soft body physics</a>. Soft body physics are also used for particle effects, liquids and cloth. Some form of limited <a href="Fluid_dynamics" title="Fluid dynamics">fluid dynamics</a> simulation is sometimes provided to simulate water and other liquids as well as the flow of fire and explosions through the air.
</p>
<div class="mw-heading mw-heading4"><h4 id="Collision_detection">Collision detection</h4></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Collision_detection" title="Collision detection">Collision detection</a></div>
<p>Objects in games interact with the player, the environment, and each other. Typically, most 3D objects in games are represented by two separate meshes or shapes. One of these meshes is the highly complex and detailed shape visible to the player in the game, such as a vase with elegant curved and looping handles. For purpose of speed, a second, simplified invisible mesh is used to represent the object to the physics engine so that the physics engine treats the example vase as a simple cylinder. It would thus be impossible to insert a rod or fire a projectile through the handle holes on the vase, because the physics engine model is based on the cylinder and is unaware of the handles. The simplified mesh used for physics processing is often referred to as the collision geometry. This may be a <a href="Bounding_box" class="mw-redirect" title="Bounding box">bounding box</a>, sphere, or <a href="Convex_hull" title="Convex hull">convex hull</a>. Engines that use bounding boxes or bounding spheres as the final shape for collision detection are considered extremely simple. Generally a bounding box is used for broad phase collision detection to narrow down the number of possible collisions before costly mesh on mesh collision detection is done in the narrow phase of collision detection.
</p><p>Another aspect of precision in discrete collision detection involves the <a href="Framerate" class="mw-redirect" title="Framerate">framerate</a>, or the number of moments in time per second when physics is calculated. Each frame is treated as separate from all other frames, and the space between frames is not calculated. A low framerate and a small fast-moving object causes a situation where the object does not move smoothly through space but instead seems to teleport from one point in space to the next as each frame is calculated. Projectiles moving at sufficiently high speeds will miss targets, if the target is small enough to fit in the gap between the calculated frames of the fast moving projectile. Various techniques are used to overcome this flaw, such as <i><a href="Second_Life" title="Second Life">Second Life</a></i><span class="nowrap" style="padding-left:0.1em;">'</span>s representation of projectiles as arrows with invisible trailing tails longer than the gap in frames to collide with any object that might fit between the calculated frames. By contrast, continuous collision detection such as in <a href="Bullet_(software)" title="Bullet (software)">Bullet</a> or <a href="Havok_(software)" title="Havok (software)">Havok</a> does not suffer this problem.
</p>
<div class="mw-heading mw-heading4"><h4 id="Soft-body_dynamics">Soft-body dynamics</h4></div>
<p>An alternative to using bounding box-based rigid body physics systems is to use a <a href="Finite_element" class="mw-redirect" title="Finite element">finite element</a>-based system. In such a system, a 3-dimensional, volumetric <a href="Tessellation" title="Tessellation">tessellation</a> is created of the 3D object. The tessellation results in a number of finite elements which represent aspects of the object's physical properties such as toughness, plasticity, and volume preservation. Once constructed, the finite elements are used by a <a href="Solver" title="Solver">solver</a> to model the stress within the 3D object. The stress can be used to drive fracture, deformation and other physical effects with a high degree of realism and uniqueness. As the number of modeled elements is increased, the engine's ability to model physical behavior increases. The visual representation of the 3D object is altered by the finite element system through the use of a deformation shader run on the CPU or GPU. Finite Element-based systems had been impractical for use in games due to the performance overhead and the lack of tools to create finite element representations out of 3D art objects. With higher performance processors and tools to rapidly create the volumetric tessellations, real-time finite element systems began to be used in games, beginning with <i><a href="Star_Wars%3A_The_Force_Unleashed" title="Star Wars: The Force Unleashed">Star Wars: The Force Unleashed</a></i> that used <a href="Digital_Molecular_Matter" title="Digital Molecular Matter">Digital Molecular Matter</a> for the deformation and destruction effects of wood, steel, flesh and plants using an algorithm developed by Dr. James O'Brien as a part of his PhD thesis.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading4"><h4 id="Brownian_motion">Brownian motion</h4></div>
<p>In the real world, physics is always active. There is a constant <a href="Brownian_motion" title="Brownian motion">Brownian motion</a> jitter to all particles in our universe as the forces push back and forth against each other. For a <a href="Game_physics" title="Game physics">game physics</a> engine, such constant active precision is unnecessarily wasting the limited CPU power, which can cause problems such as decreased <a href="Framerate" class="mw-redirect" title="Framerate">framerate</a>. Thus, games may put objects to "sleep" by disabling the computation of physics on objects that have not moved a particular distance within a certain amount of time. For example, in the 3D <a href="Virtual_world" title="Virtual world">virtual world</a> <a href="Second_Life" title="Second Life">Second Life</a>, if an object is resting on the floor and the object does not move beyond a minimal distance in about two seconds, then the physics calculations are disabled for the object and it becomes frozen in place. The object remains frozen until physics processing reactivates for the object after collision occurs with some other active physical object.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading4"><h4 id="Paradigms">Paradigms</h4></div>
<p>Physics engines for video games typically have two core components, a <a href="Collision_detection" title="Collision detection">collision detection</a>/<a href="Collision_response" title="Collision response">collision response</a> system, and the <a href="Dynamical_simulation" title="Dynamical simulation">dynamics simulation</a> component responsible for solving the forces affecting the simulated objects. Modern physics engines may also contain <a href="Computational_fluid_dynamics" title="Computational fluid dynamics">fluid simulations</a>, animation <a href="Motion_control" title="Motion control">control systems</a> and <a href="COLLADA" title="COLLADA">asset integration</a> tools. There are three major paradigms for the physical simulation of solids:<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li>Penalty methods, where interactions are commonly modelled as <a href="Soft_body_dynamics" class="mw-redirect" title="Soft body dynamics">mass-spring</a> systems. This type of engine is popular for deformable, or <a href="Soft_body_dynamics" class="mw-redirect" title="Soft body dynamics">soft-body physics</a>.</li>
<li>Constraint based methods, where <a href="Constraint_(mathematics)" title="Constraint (mathematics)">constraint equations</a> are solved that estimate physical laws.</li>
<li>Impulse based methods, where <a href="Impulse_(physics)" title="Impulse (physics)">impulses</a> are applied to object interactions. However, this is actually just a special case of a constraint based method combined with an iterative solver that propagates impulses throughout the system.</li></ul>
<p>Finally, hybrid methods are possible that combine aspects of the above paradigms.
</p>
<div class="mw-heading mw-heading2"><h2 id="Limitations">Limitations</h2></div>
<p>A primary limit of physics engine <a href="Realism_(visual_arts)" class="mw-redirect" title="Realism (visual arts)">realism</a> is the approximated result of the constraint resolutions and collision result due to the slow convergence of algorithms. Collision detection computed at a too low frequency can result in objects passing through each other and then being repelled with an abnormal correction force. On the other hand, approximated results of reaction force is due to the slow convergence of typical Projected Gauss Seidel solver resulting in abnormal bouncing. Any type of free-moving compound physics object can demonstrate this problem, but it is especially prone to affecting chain links under high tension, and wheeled objects with actively physical bearing surfaces. Higher precision reduces the positional/force errors, but at the cost of needing greater CPU power for the calculations.
</p>
<div class="mw-heading mw-heading2"><h2 id="Physics_processing_unit_(PPU)">Physics processing unit (PPU)</h2></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Physics_processing_unit" title="Physics processing unit">Physics processing unit</a></div>
<p>A physics processing unit (PPU) is a dedicated microprocessor designed to handle the calculations of physics, especially in the physics engine of <a href="Video_game" title="Video game">video games</a>. Examples of calculations involving a PPU might include <a href="Rigid_body_dynamics" title="Rigid body dynamics">rigid body dynamics</a>, <a href="Soft_body_dynamics" class="mw-redirect" title="Soft body dynamics">soft body dynamics</a>, <a href="Collision_detection" title="Collision detection">collision detection</a>, <a href="Fluid_dynamics" title="Fluid dynamics">fluid dynamics</a>, hair and clothing simulation, <a href="Finite_element_analysis" class="mw-redirect" title="Finite element analysis">finite element analysis</a>, and fracturing of objects. The idea is that specialized processors offload time-consuming tasks from a computer's CPU, much like how a <a href="GPU" class="mw-redirect" title="GPU">GPU</a> performs graphics operations in the main CPU's place. The term was coined by <a href="Ageia" title="Ageia">Ageia</a>'s marketing to describe their PhysX chip to consumers. Several other technologies in the CPU-GPU spectrum have some features in common with it, although Ageia's solution was the only complete one designed, marketed, supported, and placed within a system <i>exclusively</i> as a PPU.
</p>
<div class="mw-heading mw-heading2"><h2 id="General-purpose_computing_on_graphics_processing_unit_(GPGPU)">General-purpose computing on graphics processing unit (GPGPU)</h2></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="General-purpose_computing_on_graphics_processing_units" title="General-purpose computing on graphics processing units">General-purpose computing on graphics processing units</a></div>
<p>Hardware acceleration for physics processing is now usually provided by graphics processing units that support more general computation, a concept known as general-purpose computing on graphics processing units (GPGPU). <a href="AMD" title="AMD">AMD</a> and <a href="NVIDIA" class="mw-redirect" title="NVIDIA">NVIDIA</a> provide support for rigid body dynamics computations on their latest graphics cards.
</p><p><a href="NVIDIA" class="mw-redirect" title="NVIDIA">NVIDIA's</a> <a href="GeForce_8_series" title="GeForce 8 series">GeForce 8 series</a> supports a GPU-based Newtonian physics acceleration technology named <i>Quantum Effects Technology</i>. NVIDIA provides an SDK Toolkit for <a href="CUDA" title="CUDA">CUDA</a> (<a href="Compute_Unified_Device_Architecture" class="mw-redirect" title="Compute Unified Device Architecture">Compute Unified Device Architecture</a>) technology that offers both a low and high-level API to the GPU.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> For their GPUs, <a href="AMD" title="AMD">AMD</a> offers a similar SDK, called <a href="Close_to_Metal" title="Close to Metal">Close to Metal</a> (CTM), which provides a thin hardware interface.
</p><p><a href="PhysX" title="PhysX">PhysX</a> is an example of a physics engine that can use GPGPU based hardware acceleration when it is available.
</p>
<div class="mw-heading mw-heading2"><h2 id="Engines">Engines</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Real-time_physics_engines">Real-time physics engines</h3></div>
<style data-mw-deduplicate="TemplateStyles:r1216972533">
/* start https://en.wikipedia.org/ */
.mw-parser-output .col-begin{border-collapse:collapse;padding:0;color:inherit;width:100%;border:0;margin:0}.mw-parser-output .col-begin-small{font-size:90%}.mw-parser-output .col-break{vertical-align:top;text-align:left}.mw-parser-output .col-break-2{width:50%}.mw-parser-output .col-break-3{width:33.3%}.mw-parser-output .col-break-4{width:25%}.mw-parser-output .col-break-5{width:20%}@media(max-width:720px){.mw-parser-output .col-begin,.mw-parser-output .col-begin>tbody,.mw-parser-output .col-begin>tbody>tr,.mw-parser-output .col-begin>tbody>tr>td{display:block!important;width:100%!important}.mw-parser-output .col-break{padding-left:0!important}}
/* end https://en.wikipedia.org/ */
</style><div>
<table class="col-begin" role="presentation">
<tbody><tr>
<td class="col-break">
<dl><dt>Open source</dt></dl>
<ul><li><a href="Advanced_Simulation_Library" title="Advanced Simulation Library">Advanced Simulation Library</a> - open source hardware accelerated multiphysics simulation software</li>
<li><a href="Box2D" title="Box2D">Box2D</a></li>
<li><a href="Bullet_(software)" title="Bullet (software)">Bullet</a></li>
<li><a href="Chipmunk_physics_engine" class="mw-redirect" title="Chipmunk physics engine">Chipmunk physics engine</a> - 2D physics engine</li>
<li>Jolt Physics<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> - Horizon Forbidden West physics engine</li>
<li><a href="Newton_Game_Dynamics" title="Newton Game Dynamics">Newton Game Dynamics</a></li>
<li><a href="Open_Dynamics_Engine" title="Open Dynamics Engine">Open Dynamics Engine</a></li>
<li>PAL (Physics Abstraction Layer) - A uniform API that supports multiple physics engines</li>
<li><a href="PhysX" title="PhysX">PhysX</a></li>
<li><a href="Project_Chrono" title="Project Chrono">Project Chrono</a> - An open source simulation engine for multi-physics applications.</li>
<li>Rapier<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> - a 2D and 3D physics engine written in <a href="Rust_(programming_language)" title="Rust (programming language)">Rust</a></li>
<li><a href="Siconos" title="Siconos">Siconos</a> Modeling and the simulation of mechanical systems with contact, impact and Coulomb's friction</li>
<li><a href="SOFA_(Simulation_Open_Framework_Architecture)" class="mw-redirect" title="SOFA (Simulation Open Framework Architecture)">SOFA (Simulation Open Framework Architecture)</a></li>
<li><a href="Tokamak_physics_engine" class="mw-redirect" title="Tokamak physics engine">Tokamak physics engine</a></li></ul>
</td>
<td class="col-break">
<dl><dt>Public domain</dt></dl>
<ul><li><a href="Phyz" title="Phyz">Phyz</a> (Dax Phyz) - 2.5D physics simulator/editor.</li></ul>
<dl><dt>Closed source/limited free distribution</dt></dl>
<ul><li><a href="Digital_Molecular_Matter" title="Digital Molecular Matter">Digital Molecular Matter</a></li>
<li><a href="Havok_(software)" title="Havok (software)">Havok</a></li>
<li>Chaos by <a href="Epic_Games" title="Epic Games">Epic Games</a></li>
<li><a href="Vortex_(physics_engine)" class="mw-redirect" title="Vortex (physics engine)">Vortex</a> by CMLabs Simulations</li>
<li><a href="AGX_Multiphysics_(physics_engine)" class="mw-redirect" title="AGX Multiphysics (physics engine)">AGX Multiphysics</a> by <a href="Algoryx_Simulation_AB" title="Algoryx Simulation AB">Algoryx Simulation AB</a></li>
<li><a href="Algodoo" title="Algodoo">Algodoo</a> by <a href="Algoryx_Simulation_AB" title="Algoryx Simulation AB">Algoryx Simulation AB</a></li>
<li>Rubikon by <a href="Valve_Corporation" title="Valve Corporation">Valve Corporation</a> </li></ul>
</td></tr></tbody></table></div>
<div class="mw-heading mw-heading3"><h3 id="High_precision_physics_engines">High precision physics engines</h3></div>
<ul><li><a href="VisSim" title="VisSim">VisSim</a> - Visual Simulation engine for linear and nonlinear dynamics</li></ul>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Game_physics" title="Game physics">Game physics</a></li>
<li><a href="Ragdoll_physics" title="Ragdoll physics">Ragdoll physics</a></li>
<li><a href="Procedural_animation" title="Procedural animation">Procedural animation</a></li>
<li><a href="Rigid_body_dynamics" title="Rigid body dynamics">Rigid body dynamics</a></li>
<li><a href="Soft_body_dynamics" class="mw-redirect" title="Soft body dynamics">Soft body dynamics</a></li>
<li><a href="Physics_processing_unit" title="Physics processing unit">Physics processing unit</a></li>
<li><a href="Cell_microprocessor" class="mw-redirect" title="Cell microprocessor">Cell microprocessor</a></li>
<li><a href="Linear_complementarity_problem" title="Linear complementarity problem">Linear complementarity problem</a> Impulse/constraint physics engines require a solver for such problems to handle multi-point collisions.</li>
<li><a href="Finite_Element_Analysis" class="mw-redirect" title="Finite Element Analysis">Finite Element Analysis</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFMillington2007" class="citation book cs1">Millington, Ian (2007-03-07). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=d0NZDwAAQBAJ&q=is+computer+software+that&pg=PP1"><i>Game Physics Engine Development</i></a>. CRC Press. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-4822-6732-7</bdi>.</cite></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://graphics.eecs.berkeley.edu/site_root/papers/Obrien-GMA-1999-08/">"Graphical Modeling and Animation of Brittle Fracture"</a>. Graphics.eecs.berkeley.edu<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-09-01</span></span>.</cite></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20111001101647/http://wiki.blender.org/index.php/Doc:Manual/Game_Engine/Logic/Object_type/Rigid_body">"Doc:Manual/Game Engine/Logic/Object type/Rigid body - BlenderWiki"</a>. Wiki.blender.org. 2009-11-20. Archived from <a rel="nofollow" class="external text" href="http://wiki.blender.org/index.php/Doc:Manual/Game_Engine/Logic/Object_type/Rigid_body">the original</a> on 2011-10-01<span class="reference-accessdate">. Retrieved <span class="nowrap">2010-08-16</span></span>.</cite></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite id="CITEREFErlebenSporringHenriksenDohlmann2005" class="citation book cs1">Erleben, Kenny; Sporring, Jon; Henriksen, Knud; Dohlmann, Henrik (2005). <i>Physics-Based Animation</i>.</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.nvidia.com/page/8800_features.html">"NVIDIA 8800 features page - Quantum Effects Technology"</a>. Nvidia.com<span class="reference-accessdate">. Retrieved <span class="nowrap">2010-08-16</span></span>.</cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://github.com/jrouwe/JoltPhysics">Jolt Physics GitHub Repository</a></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://github.com/dimforge/rapier">Rapier's official GitHub repository</a></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://rapier.rs">Rapier's official website</a></span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="Further_reading">Further reading</h2></div>
<ul><li>Bourg, David M. (2002) <i><a rel="nofollow" class="external text" href="https://archive.org/details/physicsforgamede0000bour">Physics for Game Developers</a></i>. O'Reilly & Associates.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20160309162438/https://www.digitalrune.com/Blog/Post/1813/Physics-Engines-List">"Physics Engines List"</a>. <i>Database</i>. Digital Rune. Mar 30, 2015 [2010]. Archived from <a rel="nofollow" class="external text" href="https://www.digitalrune.com/Blog/Post/1813/Physics-Engines-List">the original</a> on Mar 9, 2016.</cite></li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Physics_engines_(list)195" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div id="Physics_engines_(list)195" style="font-size:114%;margin:0 4em"> (<a class="mw-selflink-fragment" href="#Engines">list</a>)</div></th></tr><tr><td class="navbox-abovebelow" colspan="2"><div>
<ul><li><a href="Game_physics" title="Game physics">Game physics</a></li>
<li><a href="Procedural_animation" title="Procedural animation">Procedural animation</a></li>
<li><a href="Physically_based_animation" title="Physically based animation">Physically based animation</a></li>
<li><a href="Ragdoll_physics" title="Ragdoll physics">Ragdoll physics</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Free /<br>open source</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Box2D" title="Box2D">Box2D</a></li>
<li><a href="Bullet_(software)" title="Bullet (software)">Bullet</a></li>
<li><a href="Cannon.js" title="Cannon.js">Cannon.js</a></li>
<li><a href="Chipmunk_(software)" title="Chipmunk (software)">Chipmunk</a></li>
<li><a href="Newton_Game_Dynamics" title="Newton Game Dynamics">Newton Game Dynamics</a></li>
<li><a href="Open_Dynamics_Engine" title="Open Dynamics Engine">Open Dynamics Engine</a></li>
<li><a href="OPAL_(software)" title="OPAL (software)">OPAL</a></li>
<li><a href="PhysX" title="PhysX">PhysX</a></li>
<li><a href="Phyz" title="Phyz">Phyz</a></li>
<li><a href="Project_Chrono" title="Project Chrono">Project Chrono</a></li>
<li><a href="Siconos" title="Siconos">Siconos</a></li>
<li><a href="Simulation_Open_Framework_Architecture" title="Simulation Open Framework Architecture">Simulation Open Framework Architecture</a></li>
<li><a href="Tokamak_(software)" title="Tokamak (software)">Tokamak</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Proprietary</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="AGX_Multiphysics" class="mw-redirect" title="AGX Multiphysics">AGX Multiphysics</a></li>
<li><a href="Algodoo" title="Algodoo">Algodoo</a></li>
<li><a href="Chipmunk_(software)" title="Chipmunk (software)">Chipmunk</a></li>
<li><a href="Digital_Molecular_Matter" title="Digital Molecular Matter">Digital Molecular Matter</a></li>
<li><a href="Euphoria_(software)" title="Euphoria (software)">Euphoria</a></li>
<li><a href="Havok_(software)" title="Havok (software)">Havok</a></li>
<li><a href="Reactor_(software)" title="Reactor (software)">Reactor</a></li>
<li><a href="Vortex_(software)" title="Vortex (software)">Vortex</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Related topics</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Tire_model" title="Tire model">Tire model</a></li></ul>
</div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-07-31" href="https://en.wikipedia.org/wiki/?title=Physics_engine&oldid=1303527841">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>